/*
 * Path Sum
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.

For example:
Given the below binary tree and sum = 22,
              5
             / \
            4   8
           /   / \
          11  13  4
         /  \      \
        7    2      1
return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.
 */
package com.xinpan.exercise;

public class PathSum {
    public boolean hasPathSum(TreeNode root, int sum) {
        // Start typing your Java solution below
        // DO NOT write main() function
        if(root == null)
            return false;
        
        boolean res = false;
        
        if(root.left != null)
        {
            res = testSub(root.left, root.val, sum);
            if(res)
                return res;
        } 
        
        if(root.right != null)
        {
            res = testSub(root.right, root.val, sum);
            if(res)
                return res;
        }

        if(root.right == null && root.left == null)
        {
            if(root.val == sum)
                return true;
        }
        return res;
    }
    
    public boolean testSub(TreeNode root, int val, int sum)
    {
        
        boolean res = false;
        
        if(root.left != null)
        {
            res = testSub(root.left, root.val+val, sum);
            if(res)
                return res;
        } 
        
        if(root.right != null)
        {
            res = testSub(root.right, root.val+val, sum);
            if(res)
                return res;
        }
        
        if(root.left == null && root.right == null)
        {
            if(root.val+val == sum)
                return true;
        }
        return res;
    }
}
